home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 5 / Gekikoh Dennoh Club Vol. 5 (Japan).7z / Gekikoh Dennoh Club Vol. 5 (Japan) (Track 01).bin / internet / aish / msmtp121.lzh / msmtp.c < prev    next >
C/C++ Source or Header  |  1996-12-23  |  3KB  |  138 lines

  1. /*    Copyright 1996 H.Ogasawara    */
  2.  
  3. #include    "stdio.h"
  4. #include    "network.h"
  5. #include    "sys/socket.h"
  6. #include    "arpa/telnet.h"
  7. #include    "sys_doslib.h"
  8.  
  9. #include    "microfio.h"
  10. #include    "microstr.h"
  11. #include    "cinet.h"
  12.  
  13. #define        MAXLINE        (1024*4)
  14.  
  15. static int    Port= 0;
  16. static char    FFm,
  17.         From[100],
  18.         To[100],
  19.         Domain[100],
  20.         Host[100];
  21. static m_file    fm;
  22. static char    _LogName[80];
  23.  
  24. static void
  25. _message( char *ptr )
  26. {
  27.     PRINT( ptr );
  28. }
  29.  
  30. static void
  31. _logclose()
  32. {
  33.     if( FFm ){
  34.         Mclose( &fm );
  35.         FFm= 0;
  36.     }
  37. }
  38.  
  39. static
  40. _logopen()
  41. {
  42.     if( FFm )
  43.         _logclose();
  44.     if( !(FFm= Mopen( &fm, _LogName )) )
  45.         _message( "âtâ@âCâïé¬éáéΦé▄é╣é±\r\n" );
  46.     return    FFm;
  47. }
  48.  
  49. static void
  50. _local_error( msg )
  51. char    *msg;
  52. {
  53.     _message( "smtp: " );
  54.     _message( msg );
  55.     _message( "\r\n" );
  56.     _logclose();
  57.     EXIT2( 0 );
  58. }
  59.  
  60. static void
  61. smtp()
  62. {
  63.     char    lbuf[MAXLINE];
  64.     if( !TnScriptExec( NULL, NULL, -1, 1 ) ) return;
  65.     if( !TnRerrExec( "HELO", Domain, -1, 1 ) ) return;
  66.     s_strcpy( s_strcpy( lbuf, "from:" ), From );
  67.     if( !TnRerrExec( "MAIL", lbuf, -1, 1 ) ) return;
  68.     s_strcpy( s_strcpy( lbuf, "to:" ), To );
  69.     if( !TnRerrExec( "RCPT", lbuf, -1, 1 ) ) return;
  70.     if( _logopen() ){
  71.         int    len;
  72.         _message( "æùÉMÆå " );
  73.         _message( To );
  74.         _message( "\r\n" );
  75.         if( !TnRerrExec( "DATA", NULL, -1, 1 ) ) return;
  76.         for(; (len= Mgets( &fm, lbuf, MAXLINE )) >= 0 ;){
  77.             lbuf[len]= '\r';
  78.             lbuf[len+1]= '\n';
  79.             lbuf[len+2]= '\0';
  80.             TnSendLine( lbuf );
  81.         }
  82.         if( !TnEofSend() ) return;
  83.         _logclose();
  84.         _message( "æùÉMè«ù╣\r\n" );
  85.     }
  86.     TnScriptExec( "QUIT", NULL, -1, 1 );
  87. }
  88.  
  89. main( argc, argv )
  90. char    **argv;
  91. {
  92.     TnSetVect( TNV_MESSAGE, _message );
  93.     TnSetVect( TNV_ERROR, _local_error );
  94.     _message( "MicroSmtp v1.21 1996 Ogasawara Hiroyuki(COR.)\r\n" );
  95.     *_LogName= '\0';
  96.     if( _get_version() < 0 ){
  97.         _local_error( "inetd" );
  98.         return;
  99.     }
  100.     TnGetEnv( Host, "SMTPSERVER" );
  101.     TnGetEnv( Domain, "MAILDOMAIN" );
  102.     TnGetEnv( From, "MAILFROM" );
  103.     for(; argv++,--argc ; ){
  104.         if( **argv == '-' ){
  105.             switch( argv[0][1] ){
  106.             case 'f':
  107.                 s_strcpy( From, *argv+2 );
  108.                 break;
  109.             case 't':
  110.                 s_strcpy( To, *argv+2 );
  111.                 break;
  112.             case 'h':
  113.                 s_strcpy( Host, *argv+2 );
  114.                 break;
  115.             case 'd':
  116.                 s_strcpy( Domain, *argv+2 );
  117.                 break;
  118.             case 'P':
  119.                 Port= n_numstr( *argv+2 );
  120.                 break;
  121.             default:
  122.                 goto    _usage;
  123.             }
  124.         }else
  125.             s_strcpy( _LogName, *argv );
  126.     }
  127.     if( *_LogName ){
  128.         TnOpen( Host, Port, "smtp" );
  129.         smtp();
  130.         _logclose();
  131.     }else{
  132.     _usage:
  133.         _message( "usage: msmtp [-hHOST] [-dDOMAIN] [-fFROM] [-Pp] -tTO file\r\n");
  134.         return    1;
  135.     }
  136.     return    0;
  137. }
  138.